//package com.cn.config.Interceptor;
//
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.ExpiredJwtException;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.MalformedJwtException;
//import io.jsonwebtoken.security.SignatureException;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.*;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import java.io.IOException;
//
//import static com.cn.common.utils.JwtUtils.secretKey;
//@Component
//public class AuthenticationFilter implements Filter {
//
//
//
//
//    @Override
//    public void init(FilterConfig filterConfig) throws ServletException {
//        Filter.super.init(filterConfig);
//    }
//
//    @Override
//    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//        if (authenticateAndAuthorize((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse)) {
//            // 如果验证和授权通过，继续执行过滤器链
//            filterChain.doFilter(servletRequest, servletResponse);
//        }
//        // 如果验证和授权失败，不继续执行过滤器链
//    }
//
//
//    @Override
//    public void destroy() {
//        Filter.super.destroy();
//    }
//    private boolean authenticateAndAuthorize(HttpServletRequest request, HttpServletResponse response) {
//        // 在这里编写验证和授权逻辑
//        // 返回 true 表示验证和授权通过，false 表示验证或授权失败
//
//        // 获取token和请求路径
//        String token = request.getHeader("Token");
//        String requestPath = request.getRequestURI();
//
//        // 检查请求路径是否是两条登录路径之一
//        if (isLoginPath(requestPath)) {
//            return true;
//        }
//
//        if (token != null) {
//            Claims claims = isValidToken(token);
//            // 如果validateToken返回null或者有异常，发送未授权的响应
//            if (claims != null) {
//                // 验证通过，获取token中的角色信息
//                String role = extractRoleFromToken(token);
//                // 在这里判断用户角色，如果是游客则发送未授权的响应
//                if ("guest".equals(role)) {
//                    sendUnauthorizedResponse(response);
//                    return false; // 不允许访问
//                } else if ("admin".equals(role)) {
//                    return true; // 允许访问
//                }
//            }
//        }
//        // 其他情况发送未授权的响应
//        sendUnauthorizedResponse(response);
//        return false;
//    }
//    private Claims isValidToken(String token) {
//        try {
//            return Jwts.parser()
//                    .setSigningKey(secretKey)
//                    .parseClaimsJws(token)
//                    .getBody();
//        } catch (ExpiredJwtException ex) {
//            // Token已过期
//            System.err.println("Token已过期: " + ex.getMessage());
//        } catch (SignatureException ex) {
//            // Token签名无效
//            System.err.println("无效的Token签名: " + ex.getMessage());
//        } catch (MalformedJwtException ex) {
//            // Token格式错误
//            System.err.println("无效的Token格式: " + ex.getMessage());
//        } catch (Exception ex) {
//            // 其他异常
//            System.err.println("Token验证失败: " + ex.getMessage());
//        }
//        return null;
//    }
//    private String extractRoleFromToken(String token) {
//        // 从token中解析出角色信息
//        Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
//        return claims.get("role", String.class);
//    }
//    private void sendUnauthorizedResponse(HttpServletResponse response) {
//        // 发送未授权响应的逻辑
//        // 例如，设置HTTP状态码为401 Unauthorized
//        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//        // 可以设置其他相关的响应头或返回响应体
//    }
//
//    private boolean isLoginPath(String requestPath) {
//        // 在这里编写检查请求路径是否是登录路径的逻辑
//        // 返回 true 表示是登录路径，false 表示不是
//        // 例如，可以检查请求路径是否是 "/guest/login" 或 "/login/Purposes"
//        return "/guest/login".equals(requestPath) || "/login/Purposes".equals(requestPath);
//    }
//}
//
